package xyz.xmh.pattern.behavioral.chainofresponsibilitypattern;

/**
 * @author Administrator
 * 抽象记录器类
 */
public abstract class AbstractLogger {

    /**
     * 记录器级别
     */
    public static final int INFO = 1;
    public static final int DEBUG = 2;
    public static final int ERROR = 3;

    /**
     * 每一个记录器的级别
     */
    protected int level;

    /**
     * 责任链中的下一个元素
     */
    protected AbstractLogger nextLogger;

    public void setNextLogger(AbstractLogger nextLogger) {
        this.nextLogger = nextLogger;
    }

    /**
     * 根据记录器级别找到对应的责任对象
     *
     * @param level   级别
     * @param message 消息
     */
    public void logMessage(int level, String message) {
        // 判断当前责任对象的是否匹配，匹配就打印消息
        if (this.level <= level) {
            write(message);
        }

        // 进行下一个责任对象
        if (nextLogger != null) {
            nextLogger.logMessage(level, message);
        }

    }

    /**
     * 打印记录的消息
     *
     * @param message 记录的消息
     */
    abstract protected void write(String message);

}
